import java.util.*;

/*
使用集合实现斗地主游戏的部分功能，要求如下：

 （1）首先准备 54 张扑克牌并打乱顺序。

 （2）由三个玩家交替摸牌，每人 17 张扑克牌，最后三张留作底牌。

 （3）查看三个玩家手中的扑克牌和底牌。

 （4）其中玩家手中的扑克牌需要按照大小顺序打印，规则如下：

    手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
 */
public class Test3 {
    public static void main(String[] args) {
        //定义一个红桃、黑桃、方块、梅花的集合。
        List<String> list1=new LinkedList<String>();
        list1.add("红桃");
        list1.add("黑桃");
        list1.add("方块");
        list1.add("梅花");
        //定义1-10、J、Q、K的集合
        List<String> list2=new LinkedList<String>();
        list2.add("A");
        list2.add("K");
        list2.add("Q");
        list2.add("J");
        for (int i=2;i<=10;i++){
            list2.add(""+i);
        }
        //首先准备 54 张扑克牌,将list1和list2的集合自由组合。
        List<String> list3=new LinkedList<String>();
        for (int i=0;i<list1.size();i++){
            for (int j=0;j<list2.size();j++){
                list3.add(""+list1.get(i)+list2.get(j));
            }
        }
        list3.add("小王");
        list3.add("大王");
        System.out.println("                         ------------------------没打乱顺序的-----------------------------------");
        System.out.println(list3);
       //把扑克拍打乱顺序
        Collections.shuffle(list3);
        System.out.println("                         ------------------------把扑克拍打乱顺序--------------------------------");
        System.out.println(list3);
       //由三个玩家交替摸牌，每人 17 张扑克牌，最后三张留作底牌。
        List<String> firstPlayer=new LinkedList<>();//定义玩家一
        List<String> secondPlayer=new LinkedList<>();//定义玩家二
        List<String> thirdPlayer=new LinkedList<>();//定义玩家三
        List<String> card=new LinkedList<>();//定义底牌
        for (int i=0;i<list3.size();i++){
           if (i<51&i%3==0){
               firstPlayer.add(list3.get(i));
           }
            else if (i<51&i%3==1){
              secondPlayer.add(list3.get(i));
            }
           else if (i<51&i%3==2){
              thirdPlayer.add(list3.get(i));
            }
           else {
               card.add(list3.get(i));
           }
        }
        //查看三个玩家手中的扑克牌和底牌。
        System.out.println();
        System.out.println("玩家一的牌为："+firstPlayer.size()+"张，分别为"+firstPlayer+"   ");
        System.out.println();
        System.out.println("玩家二的牌为："+secondPlayer.size()+"张，分别为"+secondPlayer+"   ");
        System.out.println();
        System.out.println("玩家三的牌为："+thirdPlayer.size()+"张，分别为"+thirdPlayer+"   ");
        System.out.println();
        System.out.println("底牌为："+card.size()+"张，分别为"+card+"   ");
        System.out.println();
        //其中玩家手中的扑克牌需要按照大小顺序打印，规则如下：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
        //准备一个比计较器对象作为参数传给构造方法
        //创建排序规则
        Comparator<String> comparator=new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                String s="3,4,5,6,7,8,9,10,J,Q,K,A,2,小王,大王";

                if (o1.length()==3){
                   o1= o1.substring(2);
                }
                if (o2.length()==3)
                {
                    o2=o2.substring(2);
                }
                if (o1.length()==4){
                    o1=o1.substring(2);
                }
                if (o2.length()==4)
                {
                    o2=o2.substring(2);
                }
               return s.indexOf(o1)-s.indexOf(o2);//利用字符串下标来比较
              }
        };
        Collections.sort(firstPlayer,comparator);
        Collections.sort(secondPlayer,comparator);
        Collections.sort(thirdPlayer,comparator);
        System.out.println("玩家一按顺序打印"+firstPlayer);
        System.out.println();
        System.out.println("玩家二按顺序打印"+secondPlayer);
        System.out.println();
        System.out.println("玩家三按顺序打印"+thirdPlayer);


    }
}
